home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / msn / MSNUtil.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  7KB  |  196 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from __future__ import with_statement
  5. from struct import pack, unpack
  6. from urllib2 import quote, unquote
  7. from base64 import b64encode, b64decode
  8. from string import zfill
  9. from util import get_func_name, get_func, pythonize, to_storage, Timer, default_timer, fmt_to_dict, fuzzydecode
  10. from logging import getLogger
  11. log = getLogger('msn.util')
  12. from mail.passport import make_auth_envelope
  13. msgtypes = {
  14.     'text/x-msmsgsprofile': 'profile',
  15.     'text/x-msmsgsinitialmdatanotification': 'notification',
  16.     'text/x-msmsgscontrol': 'control',
  17.     'text/plain': 'plain',
  18.     'text/x-msmsgsinitialemailnotification': 'init_email',
  19.     'text/x-msmsgsemailnotification': 'new_email',
  20.     'text/x-msmsgsinvite': 'invite',
  21.     'text/x-msnmsgr-datacast': 'datacast',
  22.     'application/x-msnmsgrp2p': 'p2p',
  23.     'text/x-clientcaps': 'caps',
  24.     'text/x-msmsgsoimnotification': 'oims' }
  25.  
  26. def utf8_encode(str):
  27.     return unicode(str, 'utf-8')
  28.  
  29.  
  30. def utf8_decode(str):
  31.     return str.encode('utf-8')
  32.  
  33.  
  34. def url_encode(str):
  35.     return quote(str)
  36.  
  37.  
  38. def url_decode(str):
  39.     return unquote(str)
  40.  
  41.  
  42. def base64_encode(s):
  43.     return s.encode('base64').replace('\n', '')
  44.  
  45.  
  46. def base64_decode(s):
  47.     return s.decode('base64')
  48.  
  49.  
  50. def utf16_encode(str):
  51.     
  52.     try:
  53.         return unicode(str, 'utf-16')
  54.     except TypeError:
  55.         if isinstance(str, unicode):
  56.             return str.encode('utf-16')
  57.         else:
  58.             return fuzzydecode(s, 'utf-8').encode('utf-16')
  59.     except:
  60.         isinstance(str, unicode)
  61.  
  62.  
  63.  
  64. def utf16_decode(str):
  65.     return str.decode('utf-16')
  66.  
  67. mime_to_dict = fmt_to_dict(';', '=')
  68. csd_to_dict = fmt_to_dict(',', '=')
  69.  
  70. def mime_to_storage(str):
  71.     info = mime_to_dict(str)
  72.     for k in info.keys():
  73.         info[pythonize(k)] = info[k]
  74.     
  75.     return to_storage(info)
  76.  
  77.  
  78. def csd_to_storage(str):
  79.     info = csd_to_dict(str)
  80.     for k in info.keys():
  81.         info[pythonize(k)] = info.pop(k)
  82.     
  83.     return to_storage(info)
  84.  
  85.  
  86. def gen_msg_payload(obj, socket, trid, msg, src_account, src_display, *params):
  87.     type = msg.get('Content-Type', None)
  88.     if type:
  89.         type = type.split(';')[0]
  90.     
  91.     if type not in msgtypes:
  92.         log.critical("Can't handle type %s", type)
  93.         return None
  94.     
  95.     func = get_func(obj, get_func_name(2) + '_%s' % msgtypes[type])
  96.     if func:
  97.         func(socket, msg, src_account, src_display, *params)
  98.     
  99.  
  100.  
  101. def dict_to_mime_header(d):
  102.     hdr = [
  103.         'MIME-Version: 1.0']
  104.     ctype = 'Content-Type'
  105.     ctype_val = d.pop(ctype, 'text/plain; charset=UTF-8')
  106.     hdr.append('%s: %s' % (ctype, ctype_val))
  107.     for k, v in d.items():
  108.         if isinstance(v, dict):
  109.             v = dict_to_mime_val(v)
  110.         
  111.         hdr.append('%s: %s' % (k, v))
  112.     
  113.     return '\r\n'.join(hdr) + '\r\n'
  114.  
  115.  
  116. def dict_to_mime_val(d):
  117.     s = []
  118.     for k, v in d.items():
  119.         None(s.append if k else '' + '%s' % v)
  120.     
  121.     return '; '.join(s)
  122.  
  123.  
  124. def bgr_to_rgb(c):
  125.     s = '000000' + c[-6:]
  126.     (b, g, r) = [ a + b for a, b in zip(s[::2], s[1::2]) ]
  127.     return r + g + b
  128.  
  129.  
  130. def rgb_to_bgr(s):
  131.     (r, g, b) = [ a + b for a, b in zip(s[::2], s[1::2]) ]
  132.     s = b + g + r
  133.     while s.startswith('0'):
  134.         s = s[1:]
  135.         continue
  136.         []
  137.     return s
  138.  
  139.  
  140. class FuncProducer(object):
  141.     
  142.     def __init__(self, f):
  143.         object.__init__(self)
  144.         self.f = f
  145.  
  146.     
  147.     def more(self):
  148.         
  149.         try:
  150.             v = self.f()
  151.         except:
  152.             v = None
  153.         finally:
  154.             return v
  155.  
  156.  
  157.  
  158.  
  159. def q_untilready(func):
  160.     
  161.     def wrapper(self, *a, **k):
  162.         if self.state == 'ready' and self.session_id == None and self.type == 'sb':
  163.             print 'ERROR STATE DETECTED: CALLING DISCONNECT', self
  164.             self.disconnect()
  165.         
  166.         print 'in quntilready -- %r' % self
  167.         if self.state != 'ready':
  168.             self._q.append((func, (self,) + a, k))
  169.             if self.state == 'disconnected':
  170.                 self.connect()
  171.             elif self.state != 'calling':
  172.                 self.invite(self.buddy)
  173.             
  174.         else:
  175.             return func(self, *a, **k)
  176.  
  177.     return wrapper
  178.  
  179. import functools
  180.  
  181. def dispatch(f):
  182.     
  183.     def wrapper(self, *a, **k):
  184.         print 'DISPATCH type:', self.type
  185.         fname = '_%s_%s' % (f.func_name.lstrip('_'), self.type)
  186.         if f(self, *a, **k):
  187.             print 'dispatch: calling %s' % fname
  188.             return getattr(self, fname)(*a, **k)
  189.         else:
  190.             print 'dispatch: not calling %s' % fname
  191.             return False
  192.  
  193.     wrapper = (functools.wraps(f),)(wrapper)
  194.     return wrapper
  195.  
  196.